#! user/bin/python
# -*- coding: utf-8 -*-

"""
Created on 2021/8/19 15:31

@File: 标准库服务器类_class-server.py
@Author: LT
@Description: Python标准库中已有标准工具可以把线程服务器，在不阻塞传入请求的情况夏处理客户端变得容易。

              socketserver模块——可以实现服务器并行处理（即异步处理）客户端，以避免在长期运行的事务处理中，拒绝服务新的请求
"""
import socketserver
import time

myHost = ""
myPort = 50007


def now():
    return time.ctime(time.time())


class MyClientHandler(socketserver.BaseRequestHandler):
    def handle(self) -> None:                                   # 处理每个客户端连接
        print(self.client_address, now())
        time.sleep(5)
        while True:                                             # self.request就是客户端的套接字
            data = self.request.recv(1024)                      # 从客户端读取内容，并回复给客户端的套接字
            if not data:
                break
            reply = 'Echo=>%s at %s' % (data, now())
            self.request.send(reply.encode())
        self.request.close()


# 创建一个线程化服务器，持续监听/处理客户端
myaddr = (myHost, myPort)
server = socketserver.ThreadingTCPServer(myaddr, MyClientHandler)
server.serve_forever()
